#include <iostream>
using std::cout;
using std::endl;

int func(){
    int num = 10;
    return num;
}


int gNum = 10;

int & func2(){
    return gNum;
}


int && func3(){
    return std::move(gNum);
}


void test1(){
    /* &func();  //func返回值是局部变量的副本，是右值 */
    int && ref = func();
    cout << &ref << endl;  //可以取址，此时ref是一个右值引用，其本身是左值

    //func2的返回值是绑定到gNum的一个匿名的左值引用，其本身是左值
    cout << &func2() << endl;
    cout << &gNum << endl;

    //func3的返回值是一个右值属性的右值引用
    //右值引用本身是左值还是右值取决于是否有名字
    //有名字的右值引用是左值
    //没有名字的右值引用是右值
    /* &func3(); */
    int && ref2 = func3();
    cout << &ref2 << endl;

}
void test0(){

}

int main(void){
    test1();
    return 0;
}
